tg-me.com/devopsslib/3701
Last Update:
📖 Как не дублировать плейбуки в Ansible
Роли — это как готовые наборы LEGO для вашей инфраструктуры. Вместо того чтобы писать однообразный код заново, вы собираете инфраструктуру из модулей. Сейчас покажем как это сделать.
1. Подготовка структуры роли
Для создания роли можно самостоятельно подготовить набор директорий:
myrole/
├── tasks/ # Основные задачи (playbook внутри роли)
│ └── main.yml # Точка входа задач
├── handlers/ # Обработчики — команды, которые срабатывают при изменениях
│ └── main.yml
├── files/ # Статические файлы для копирования на целевые хосты
├── templates/ # Jinja2-шаблоны — конфиги с переменными
├── defaults/ # Значения переменных по умолчанию (низший приоритет)
│ └── main.yml
├── vars/ # Переменные с более высоким приоритетом
│ └── main.yml
├── meta/ # Метаинформация о роли, в том числе зависимости от других ролей
│ └── main.yml
├── library/ # Пользовательские модули (если нужны)
├── tests/ # Плейбуки и окружение для тестирования роли
└── README.md # Документация по роли — зачем, как использовать
Но для этого есть лайфхак — команда
ansible-galaxy init myrole
. С помощью неё можно создать всю структуру без единого mkdir
.2. Пишем задачи
Роль в Ansbile это по сути отдельный плейбук. Внутри
tasks/main.yml
мы опишем свои таски, которые он должен выполнять. Пример: установим htop и создадим файл приветствия.
- name: Устанавливаем htop
apt:
name: htop
state: present
become: yes
- name: Создаём файл приветствия
copy:
dest: /tmp/welcome.txt
content: "Hello from Ansible role!"
3. Подключим роль в плейбуке
В основной плейбук нужно добавить нашу роль:
- hosts: all
become: yes
roles:
- myrole
4. Всё готово к запуску.
Остаётся только воспользоваться командой:
ansible-playbook -i inventory.ini site.yml
В Ansible Galaxy есть коллекция ролей, написанных сообществом. От самых простых до ролей, которые используются в крупных компаниях.